'use strict';

// // // 一、基础题
// // // 1. 已知一个三角形的底为10，高为5，请尝试声明底和高两个变量，并求出这个三角形的面积，在控制台进行打印。
// // //  提示：三角形的面积=(底*高)/2
// var a=10;
// var b=5;
// var S=a*b/2;
// console.log(S);



// // // 2. 请编写一个程序，可以求出1到100之间所有偶数的和，并在控制台打印。
// var sum=0;
// for(let i=2;i<=100;i+=2){
//     sum=sum+i;
// }
// console.log(sum);




// // // // 3. 请使用相关数学函数在1 ~ 10000随机取一个数，并在控制台打印。
// function y() {
//     var a=Math.ceil(Math.random()*10000);
//     console.log(a); 
// }
// y();






// // // 4. 请声明一个函数，传入参数为绩效分数score，根据如下规则进行判断并返回相关字符串：
// // //  90~100：返回 考核等级S，奖励3倍工资
// // //  80~89：返回 考核等级A，奖励2倍工资
// // //  70~79：返回 考核等级B，奖励1倍工资
// // //  60~69：返回 等级C，不奖励，需要继续努力
// // //  0~59：返回 考核等级D，考核较差，需要再观察或者劝退

// var a=window.prompt('请输入你的绩效分数');
// function m(a) {
//     if(a>90&&a<=100){
//         console.log('考核等级S，奖励3倍工资');
//     }else if(a>80&&a<=90){
//         console.log('考核等级A，奖励2倍工资');
//     }else if(a>70&&a<=80){
//         console.log('考核等级B，奖励1倍工资');
//     }else if(a>60&&a<=70){
//         console.log('等级C，不奖励，需要继续努力');
//     }else if(a>=0&&a<=60){
//         console.log('考核等级D，考核较差，需要再观察或者劝退');
//     }
// };
// m(a);






// // // 5. 请声明一个函数，传入参数为正整数n，函数内计算n!，并返回结果。
// // //  提示：请注意对参数进行校验。
// // //  提示：n! = 1 * 2 * 3 * ... * n

// function k() {
//     var n=window.prompt('请传入正整数');
//     var sum=1;
//     for(var i=n;i>0;i--){
//         sum=sum*i;
//     }
//     console.log(sum);
// }
// k();





// // // 6. 请声明一个函数，传入参数为字符串str，在函数内移除str首尾空格，然后计算长度，并返回长度
// function v() {
//     var z=window.prompt('请输入字符串');
//     var str=z.trim();
//     let str2=str.length;
//     console.log(str2);
// }
// v();






// // // // 7. 请声明一个匿名函数，传入参数为数组arr，在函数内对数组进行求和，并返回和。
// // // //  调用这个函数，传入数组参数：[10,30,50,22]，打印函数返回结果
// function n() {
//     var arr=[10,30,50,22];
//     var sum=0;
//     for(var i=0;i<arr.length;i++){
//         sum=sum+arr[i];
//     }
//     console.log(sum);
// }
// n();




// // // 8. 已知一个数组为：[ 1, 4, 3, 2 ]，
// // //  请使用数组相关的方法检测元素 3 在数组中是否存在，
// // //  存在则在控制打印出相应的下标，否则打印不存在。
// var arr=[ 1, 4, 3, 2 ];
// var c=arr.indexOf('3');
// if(c=3){
//     var a=arr.indexOf(3);
//     console.log(a);
// }else{
//     console.log('不存在');
// }





// // // 9. 已知一个用户对象为：{id: 1, name: "庄周", desc: "辅助"}，
// // //  请尝试声明一个变量表示上面这个对象，
// // //  然后给这个对象增加一个性别属性，属性名称为：sex，属性值为：男。
// // //  最后在控制台打印这个对象。
// var a={
//     id: 1, 
//     name: "庄周", 
//     desc: "辅助"
// }
// a.sex='男';
// console.log(a);




// // // 10. 声明一个学生类，包含：姓名（name）、性别（gender）、生日字段（birthday）
// // //  实例化一个学生对象，学生相关属性为：
// // //      姓名：鬼谷子
// // //      性别：男
// // //      生日：2002-07-28
// // //  实例化完成之后，在控制台打印这个对象。
// function student(name,gender,birthday) {
//     this.name=name;
//     this.gender=gender;
//     this.birthday=birthday;
// }
// var a=new student('鬼谷子','男','2002-07-28');
// console.log(a);







// // 一、困难题
// /* <!-- 第一题大题 --> */
// //请利用构造函数定义Cat，并让所有的Cat对象有一个name属性，并共享一个方法say()，返回字符串'Hello, xxx!'：
// function Cat(name) {
//     this.name=name;
// }

// Cat.prototype.say=function(){
//     return 'Hello, ' + this.name + '!';
// };
// // 测试:
// var kitty = new Cat('Kitty');
// var doraemon = new Cat('哆啦A梦');
// if (kitty && kitty.name === 'Kitty'
//     && kitty.say
//     && typeof kitty.say === 'function'
//     && kitty.say() === 'Hello, Kitty!'
//     && kitty.say === doraemon.say
// ) {
//     console.log('测试通过!');
// } else {
//     console.log('测试失败!');
// }







// /* <!-- 第二题大题 --> */
// //按字符串顺序重新排序DOM节点：
// var t=document.getElementById('test-list');
// t.removeChild(t.children[5]);
// t.removeChild(t.children[3]);
// t.removeChild(t.children[1]);
// // 测试:
// ;(function () {
//     var
//         arr, i,
//         t = document.getElementById('test-list');
//     if (t && t.children && t.children.length === 3) {
//         arr = [];
//         for (i = 0; i < t.children.length; i ++) {
//             arr.push(t.children[i].innerText);
//         }
//         if (arr.toString() === ['JavaScript', 'HTML', 'CSS'].toString()) {
//             console.log('测试通过!');
//         }
//         else {
//             console.log('测试失败: ' + arr.toString());
//         }
//     }
//     else {
//         console.log('测试失败!');
//     }
// })();






// /* <!-- 第三题大题 --> */
// // 选择<p>JavaScript</p>:
// var js=document.getElementById('test-p');

// // 选择<p>Python</p>,<p>Ruby</p>,<p>Swift</p>:
// var arr=document.getElementById('test-div').getElementsByClassName('c-red c-green')[0].getElementsByTagName('p');

// // 选择<p>Haskell</p>:
// var haskell=document.getElementById('test-div').getElementsByClassName('c-green')[1].getElementsByTagName('p')[1];

// // 测试:
// if (!js || js.innerText !== 'JavaScript') {
//     alert('选择JavaScript失败!');
// } else if (!arr || arr.length !== 3 || !arr[0] || !arr[1] || !arr[2] || arr[0].innerText !== 'Python' || arr[1].innerText !== 'Ruby' || arr[2].innerText !== 'Swift') {
//     console.log('选择Python,Ruby,Swift失败!');
// } else if (!haskell || haskell.innerText !== 'Haskell') {
//     console.log('选择Haskell失败!');
// } else {
//     console.log('测试通过!');
// }







// /* <!-- 第四题大题 --> */
// /* 使用jQuery选择器分别选出指定元素：

// + 仅选择JavaScript

// + 仅选择Erlang

// + 选择JavaScript和Erlang

// + 选择所有编程语言

// + 选择名字input

// + 选择邮件和名字input */



// var selected = null;
// selected=$('#para-1');
// selected=$('.color-red.color-green');
// selected=$('#para-1,.color-red.color-green');
// selected=$('#test-jquery>p');
// selected=$('input[name=name]');
// selected=$('input [name=email],input[name=name]');

// // ('答案写这里');
// // selected = ('答案写这里');
// // ('答案写这里');
// // 高亮结果:
// if (!(selected instanceof jQuery)) {
//     console.log('不是有效的jQuery对象!');
// }
// $('#test-jquery').find('*').css('background-color', '');
// selected.css('background-color', '#ffd351');






// // /* <!-- 第五题大题 --> */
// // // 输入值后，用jQuery获取表单的JSON字符串，key和value分别对应每个输入的name和相应的value，例如：`{"name":"Michael","email":...}`
// // 'use strict';
// var json=null;
// var str3={};
// str3.name=$('input[name="name"]').val();
// str3.email=$('input[name="email"]').val();
// str3.password=$('input[name="password"]').val();
// str3.gender=$('input[type="radio"]:checked').parent().text();
// str3.city=$('option:checked').text();
// json=JSON.stringify(str3,null,' ');

// if(typeof(json) === 'string'){
//     console.log(json);
// }
// else{
//     console.log('json变量不是string!');
// }




// // /* <!-- 第六题大题 --> */
// // //除了列出的3种语言外，请再添加Pascal、Lua和Ruby，然后按字母顺序排序节点：

// var a=$('#test-div ul');
// a.append($('<li><span>Pascal</span></li>'));
// a.append($('<li><span>Lua</span></li>'));
// a.append($('<li><span>Ruby</span></li>'));

// var js=$('#test-div>ul>li:first-child');
// js.after('<li><span>Lua</span></li>');
// var lua=js.next();

// lua.after('<li><span>Pascal</span></li>');
// var pas=lua.next();

// var pyt=pas.next();

// pyt.after('<li><span>Ruby</span></li>');

// for(var i=1;i<=3;i++){
//     var b=$('#test-div>ul>li:last-child');
//     b.remove();
// }


// ;(function () {
//     var s = $('#test-div>ul>li').map(function () {
//         return $(this).text();
//     }).get().join(',');
//     if (s === 'JavaScript,Lua,Pascal,Python,Ruby,Swift') {
//         console.log('测试通过!');
//     } else {
//         console.log('测试失败: ' + s);
//     }
// })();


// /* <!-- 第七题大题 --> */
// /* 
// + 绑定合适的事件处理函数，实现以下逻辑：

// + 当用户勾上“全选”时，自动选中所有语言，并把“全选”变成“全不选”；

// + 当用户去掉“全不选”时，自动不选中所有语言；

// + 当用户点击“反选”时，自动把所有语言状态反转（选中的变为未选，未选的变为选中）；

// + 当用户把所有语言都手动勾上时，“全选”被自动勾上，并变为“全不选”；

// + 当用户手动去掉选中至少一种语言时，“全不选”自动被去掉选中，并变为“全选”。


$(function () {
  var
    form = $('#test-form'),
    langs = form.find('[name=lang]'),
    selectAll = form.find('label.selectAll :checkbox'),
    selectAllLabel = form.find('label.selectAll span.selectAll'),
    deselectAllLabel = form.find('label.selectAll span.deselectAll'),
    invertSelect = form.find('a.invertSelect');

  // 重置初始化状态:
  form.find('*').show().off();
  form.find(':checkbox').prop('checked', false).off();
  deselectAllLabel.hide();
  // 拦截form提交事件:
  form.off().submit(function (e) {
    e.preventDefault();
    alert(form.serialize());
  });

  selectAll.change(function () {
    if (this.checked) {
      langs.prop('checked', true);
      deselectAllLabel.show();
      selectAllLabel.hide();
    } else {
      langs.prop('checked', false);
      deselectAllLabel.hide();
      selectAllLabel.show();
    }
  })

  invertSelect.click(function () {
    langs.each(function () {
      if (this.checked) {
        $(this).prop('checked', false);
      } else {
        this.checked = true;
      }
    })
  })

  //alert(langs.length);
  var count = 0,
    len = langs.length;
  langs.click(function () {
    count = 0;
    langs.each(function () {
      if (this.checked)
        count++;
    })
    if (count == len) {
      selectAll.prop('checked', true);
      deselectAllLabel.show();
      selectAllLabel.hide();
    } else {
      selectAllLabel.show();
      deselectAllLabel.hide();
      selectAll.prop('checked', false);
    }
  })
})





//  */
// var
//     form = $('#test-form'),
//     langs = form.find('[name=lang]'),
//     selectAll = form.find('label.selectAll :checkbox'),
//     selectAllLabel = form.find('label.selectAll span.selectAll'),
//     deselectAllLabel = form.find('label.selectAll span.deselectAll'),
//     invertSelect = form.find('a.invertSelect');

// // 重置初始化状态:
// form.find('*').show().off();
// form.find(':checkbox').prop('checked', false).off();
// deselectAllLabel.hide();
// // 拦截form提交事件:
// form.off().submit(function (e) {
//     e.preventDefault();
//     alert(form.serialize());
// });
// // TODO:绑定事件
// ('答案写这里')
// ('答案写这里')
// ('答案写这里')
// ('答案写这里')
// ('答案写这里')
// ('答案写这里')
// ('答案写这里')
// // 测试:
// console.log('请测试功能是否正常。');





// 练习：不要使用JavaScript内置的parseInt()函数，利用map和reduce操作实现一个string2int()函数：
// ```
// 'use strict';

// function string2int(s) {
//   let a=s.split('');
//   let b=a.map((x)=>+x);

//   return b.reduce((x,y)=>x*10+y);

// }

// // 测试:
// if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
//   if (string2int.toString().indexOf('parseInt') !== -1) {
//       console.log('请勿使用parseInt()!');
//   } else if (string2int.toString().indexOf('Number') !== -1) {
//       console.log('请勿使用Number()!');
//   } else {
//       console.log('测试通过!');
//   }
// }
// else {
//   console.log('测试失败!');
// }




//练习请把用户输入的不规范的英文名字，变为首字母大写，其他小写的规范名字。输入：['adam', 'LISA', 'barT']，输出：['Adam', 'Lisa', 'Bart']。
// function normalize(arr) {
//   function a(x) {
//       var newArr='';
//       for(let i=0;i<x.length;i++){
//           if(i===0){
//               newArr+=x[i].toUpperCase();
//           }else{
//               newArr+=x[i].toLowerCase();
//           }
//       }
//       return newArr;
//   }
//   return arr.map(a);
// }

// // 测试:
// if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) {
//   console.log('测试通过!');
// }
// else {
//   console.log('测试失败!');
// }



//练习请尝试用filter()筛选出素数：


// function get_primes(arr) {
//   return arr.filter(function(x){
//       var a=true;
//       if(x<2){
//           a=false;
//       }
//       else{
//           for(let i=2;i<x;i++){
//               if(x%i===0){
//                   a=false;
//                   break;
//               }
//           }
//       }
//       return a;
//   })

// }

// // 测试:
// var
//   x,
//   r,
//   arr = [];
// for (x = 1; x < 100; x++) {
//   arr.push(x);
// }
// r = get_primes(arr);
// if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
//   console.log('测试通过!');
// } else {
//   console.log('测试失败: ' + r.toString());
// }